文章同步於blog
今天要介紹的是介面隔離原則(ISP, Interface Segregation Principle)
ISP的原則就是,不該強迫使用者使用不需要使用的介面。
先說他與程式語言的關係
靜態型別在一開始宣告實即確定型別,像是Java必須要使用import, use, include,建立原始碼的依賴關係
而像是Python這種動態語言就不存在這種宣告,所以我可以在我需要的時候才會實做這些方法
你可能會想,沒差啊,我就寫完擺在那邊
但換個角度想,今天有可能會因為某些原因而導致,其他預料之外的問題導致需要解決,那為什麼不一開始就處理乾淨,把不需要的介面拿掉
這次我用PHP實作
interface Pet {
public function speak();
public function cleanLitterBox();
}
class Cat implements Pet {
public function speak() {
echo "喵喵\n";
}
public function cleanLitterBox() {
echo "不要亂看,我在上廁所!\n";
}
}
// 使用範例
$cat = new Cat();
$cat->speak();
$cat->cleanLitterBox();
我們先定義一個寵物的介面,假設我家的寵物有狗和貓,貓會埋貓砂,但狗(一般狀況下)不會埋貓砂
這對於我們來說,把介面實坐在裡面,可能會在未來有不可預期的問題
所以建議將Pet
這個介面改成
interface Pet {
public function speak();
}
或是乾脆一點貓和狗的介面直接分開
這章節真的滿短的,沒什麼好講的
明天就到SOLID的最後一個原則了
Clean Architecture(ch.10)
程式範例有個小錯誤,介面宣告是cleanLitterBox,但是類別實作卻是diggingLitterBox。
感謝,已修正程式碼。